package com.cazor.common.utils.map;

public class GPSUtil {

    private static final double EARTH_RADIUS = 6378137.0; // 地球半径(单位:米)


    /**
     * 基于googleMap中的算法得到两经纬度之间的距离,
     * 计算精度与谷歌地图的距离精度差不多，相差范围在0.2米以下
     * @param lon1 第一点的经度
     * @param lat1 第一点的纬度
     * @param lon2 第二点的经度
     * @param lat2 第二点的纬度
     * @return 返回的距离，单位m
     * */
    public static double getDistance(double lon1,double lat1,double lon2, double lat2) {
        double radLat1 = rad(lat1);
        double radLat2 = rad(lat2);
        double a = radLat1 - radLat2;
        double b = rad(lon1) - rad(lon2);
        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
        s = s * EARTH_RADIUS;
        return s;
    }


    /**
     * 基于googleMap中的算法得到两经纬度之间的距离,
     * 计算精度与谷歌地图的距离精度差不多，相差范围在0.2米以下
     * @param lo1 第一点的经度
     * @param la1 第一点的纬度
     * @param lo2 第二点的经度
     * @param la2 第二点的纬度
     * @return 返回的距离，单位m
     * */
    public static double getDistance(String lo1, String la1, String lo2, String la2) {

        try{
            double lon1 = Double.parseDouble(lo1);
            double lat1 = Double.parseDouble(la1);
            double lon2 = Double.parseDouble(lo2);
            double lat2 = Double.parseDouble(la2);
            return getDistance(lon1, lat1, lon2, lat2);

        }catch (Exception e){
            e.printStackTrace();
            return 0.0;
        }
    }

    // 角度转弧度
    // 把用角度表示的角转换为近似相等的用弧度表示的角 Math.toRadians。
    // 经纬度是以度数（0-360）表示。如果要把度数转换为弧度（0-2π），要除以360再乘以2ππ（相当于，乘以π/ 180）。
    private static double rad(double d) {  return d * Math.PI / 180.0; }

}
